##有5个具有5种不同颜色的房间;每个房间里分别住着一个不同国籍的人;
##每个人都在喝一种特定品牌的饮料;抽一特定品牌的香烟;养一特定的宠物;
##没有任意的两个人在抽相同品牌的烟﹑或喝相同品牌饮料﹑或养相同的宠物。
##同时又知:
##1.英国人住在红房子里;
##2.瑞典人养狗;
##3.丹麦人喝茶;
##4.绿房子紧挨着白房子，在白房子的左边;
##5.绿房子主人喝咖啡;
##6.抽PALL MALL牌香烟的人养鸟;
##7.黄房子里的人抽DUNHILL牌的烟;
##8.住中间房子的人喝牛奶;
##9.挪威人住在第一个房子里(最左边);
##10.抽BLENDS香烟的人和养猫的人相邻;
##11.养马的人和抽DUNHILL牌香烟的人相邻;
##12.抽BLUEMASTER牌香烟的人喝啤酒;
##13.德国人抽PRINCE牌香烟;
##14.挪威人和住蓝房子的人相邻;
##15.抽BLENDS牌香烟的人和喝矿泉水的人相邻。
##问:谁在养鱼?

##由上述条件可知：
##0、国籍有：英国、瑞典、丹麦、挪威、德国 （对应1~5）
##1、房子颜色有：红色、白色、绿色、蓝色、黄色 （对应1~5）
##2、宠物有：狗、鸟、猫、鱼、马 （对应1~5）
##3、饮料有：茶、咖啡、矿泉水、牛奶、啤酒 （对应1~5）
##4、烟的品牌有：PALL MALL、BLENDS、BLUEMASTER、PRINCE、DUNHILL （对应1~5）

from itertools import permutations #引入全排列函数
nationality=list(permutations(['英国','瑞典','丹麦','挪威','德国'])) #全排列的nationality可能情况
color=list(permutations(['红色','白色','绿色','蓝色','黄色'])) #全排列的color可能情况
pet=list(permutations(['狗','鸟','猫','鱼','马'])) #全排列的pet可能情况
drink=list(permutations(['茶','咖啡','矿泉水','牛奶','啤酒'])) #全排列的drink可能情况
smoke=list(permutations(['PALL MALL','BLENDS','BLUEMASTER','PRINCE','DUNHILL'])) #全排列的smoke可能情况

#对nationality进行循环找到满足条件的几种情况
for temp_n in nationality: 
    temp_n=list(temp_n)#为方便后续找对应值索引
    ##9.挪威人住在第一个房子里(最左边)
    if(temp_n[0]!='挪威'):
        continue
    #print(temp_n)
    #对color进行循环找到满足条件的几种情况
    for temp_c in color:
        temp_c=list(temp_c)
        ##1.英国人住在红房子里
        if(temp_c[temp_n.index('英国')]!='红色'):
            continue
        ##4.绿房子紧挨着白房子，在白房子的左边
        if(temp_c.index('白色')-temp_c.index('绿色')!=1):
            continue
        ##14.挪威人和住蓝房子的人相邻
        if(abs(temp_n.index('挪威')-temp_c.index('蓝色'))!=1):
            continue
        #对pet进行循环找到满足条件的几种情况
        for temp_p in pet:
            temp_p=list(temp_p)
            ##2.瑞典人养狗
            if(temp_p[temp_n.index('瑞典')]!='狗'):
                continue
            #对drink进行循环找到满足条件的几种情况
            for temp_d in drink:
                temp_d=list(temp_d)
                ##8.住中间房子的人喝牛奶
                if(temp_d[2]!='牛奶'):
                    continue
                temp_d=list(temp_d)
                ##3.丹麦人喝茶
                if(temp_d[temp_n.index('丹麦')]!='茶'):
                    continue
                ##5.绿房子主人喝咖啡
                if(temp_d[temp_c.index('绿色')]!='咖啡'):
                    continue
                #对smoke进行循环找到满足条件的几种情况
                for temp_s in smoke:
                    temp_s=list(temp_s)
                    ##6.抽PALL MALL牌香烟的人养鸟
                    if(temp_s[temp_p.index('鸟')]!='PALL MALL'):
                        continue
                    ##7.黄房子里的人抽DUNHILL牌的烟
                    if(temp_s[temp_c.index('黄色')]!='DUNHILL'):
                        continue
                    ##10.抽BLENDS香烟的人和养猫的人相邻
                    if(abs(temp_p.index('猫')-temp_s.index('BLENDS'))!=1):
                        continue
                    ##11.养马的人和抽DUNHILL牌香烟的人相邻
                    if(abs(temp_p.index('马')-temp_s.index('DUNHILL'))!=1):
                        continue
                    ##12.抽BLUEMASTER牌香烟的人喝啤酒
                    if(temp_s[temp_d.index('啤酒')]!='BLUEMASTER'):
                        continue
                    ##13.德国人抽PRINCE牌香烟
                    if(temp_s[temp_n.index('德国')]!='PRINCE'):
                        continue
                    ##15.抽BLENDS牌香烟的人和喝矿泉水的人相邻
                    if(abs(temp_s.index('BLENDS')-temp_d.index('矿泉水'))!=1):
                        continue
                    result_index=temp_p.index('鱼')
                    print('第一户','第二户','第三户','第四户','第五户','（对应信息如下）')
                    print(temp_n)
                    print(temp_c)
                    print(temp_p)
                    print(temp_d)
                    print(temp_s)
                    print('第'+str(result_index)+'间房子里住着'+temp_n[result_index]+'人',end=',')
                    print('房子是'+temp_c[result_index]+'，宠物是'+temp_p[result_index],end=',')
                    print('喜欢喝'+temp_d[result_index]+',喜欢抽'+temp_s[result_index]+'牌子的烟')
                    
                    
                    
                
                
                
















        
        
        
